﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing;

namespace sistemaAcademicoFinanceiroEscolas.Relatorios
{
    public partial class relatorioFaturamentoDisciplina : System.Web.UI.Page
    {
        validarValores vV = new validarValores();
        public double valorTotal;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                // Carregar professors existentes e ativos

                SqlConnection sqlc = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
                sqlc.Open();

                SqlConnection sqld = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
                sqld.Open();

                string sqldisciplina = "select * from disciplina order by descricaodisciplina";

                SqlCommand cmddisciplina = new SqlCommand(sqldisciplina, sqlc);
                SqlDataReader myReaderdisciplina = cmddisciplina.ExecuteReader();

                ListItem disciplinaSelecione = new ListItem();
                disciplinaSelecione.Value = "0";
                disciplinaSelecione.Text = "Selecione uma disciplina";

                lstDisciplina.Items.Add(disciplinaSelecione);

                if (myReaderdisciplina.HasRows)
                {

                    while (myReaderdisciplina.Read())
                    {
                        ListItem disciplina = new ListItem();

                        disciplina.Value = myReaderdisciplina["codigodisciplina"].ToString();
                        disciplina.Text = myReaderdisciplina["descricaodisciplina"].ToString();

                        lstDisciplina.Items.Add(disciplina);
                    }

                }
                //disciplina carregados
                myReaderdisciplina.Close();
                cmddisciplina.Dispose();


                string sqlano = "select * from anoletivo order by codigoAnoLetivo desc";

                SqlCommand cmdano = new SqlCommand(sqlano, sqlc);
                SqlDataReader myReaderano = cmdano.ExecuteReader();

                ListItem anoSelecione = new ListItem();
                anoSelecione.Value = "0";
                anoSelecione.Text = "Selecione um ano";

                lstAno.Items.Add(anoSelecione);

                if (myReaderano.HasRows)
                {

                    while (myReaderano.Read())
                    {
                        ListItem ano = new ListItem();

                        ano.Value = myReaderano["codigoAnoLetivo"].ToString();
                        ano.Text = myReaderano["descricaoAnoLetivo"].ToString();

                        if (Convert.ToInt16(myReaderano["descricaoAnoLetivo"]) <= Convert.ToInt16(DateTime.Now.Year))
                        {
                            lstAno.Items.Add(ano);
                        }
                    }

                }
                //ano carregados
                myReaderano.Close();
                cmdano.Dispose();

                // fechando conexão com o banco de dados
                sqlc.Close();

                
            }
        }

        protected void lstAno_SelectedIndexChanged(object sender, EventArgs e)
        {
            listar();
        }

        void listar()
        {
            if (lstDisciplina.SelectedValue == "0" || lstAno.SelectedValue == "0")
            {
                string validacao = "<script language=javascript>alert('Selecione uma disciplina e um ano para gerar o relatório.');</script>";
                Panel1.Controls.Add(new LiteralControl(validacao));
                lstDisciplina.Focus();
            }
            else
            {
                double valorCusto = aula();
                string conteudoAnual = "", conteudoMensal = "", conteudoGrafico = "";

                conteudoAnual = "<table width=\"100%\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\" bordercolor=\"#99CCFF\">\n";

                conteudoAnual += "<tr style=\"background-color: #f6f9fc\">\n";
                conteudoAnual += "<th colspan=\"5\"><h2>Anual</h2></th>\n";
                conteudoAnual += "</tr>\n";

                conteudoAnual += "<tr style=\"background-color: #f6f9fc\">\n";
                conteudoAnual += "<th>Ano</th>\n";
                conteudoAnual += "<th>Valor pago por disciplina</th>\n";
                conteudoAnual += "</tr>\n";

                conteudoAnual += "<tr align=\"center\">\n";
                conteudoAnual += "<td>" + lstAno.SelectedItem.Text + "</td>\n";
                conteudoAnual += "<td>R$ " + vV.validar(valorCusto.ToString()) + "</td>\n";
                conteudoAnual += "</tr>\n";

                Panel1.Controls.Add(new LiteralControl(conteudoAnual));

                conteudoGrafico = "<script type=\"text/javascript\">\n";
                conteudoGrafico += "gvChartInit();\n";
                conteudoGrafico += "jQuery(document).ready(function() {\n";
                conteudoGrafico += "jQuery('#graf').gvChart({chartType: 'LineChart',gvSettings: {vAxis: { title: '' },hAxis: { title: '' },width: 600,height: 300}});\n";
                conteudoGrafico += "});\n";
                conteudoGrafico += "</script>\n";
                conteudoGrafico += "<table id='graf'>\n";
                conteudoGrafico += "<caption>Gráfico mensal de " + lstAno.SelectedItem.Text + "</caption>\n";
                conteudoGrafico += "<thead>\n";
                conteudoGrafico += "<tr>\n";
                conteudoGrafico += "<th></th>\n";
                conteudoGrafico += "<th>Jan</th>\n";
                conteudoGrafico += "<th>Fev</th>\n";
                conteudoGrafico += "<th>Mar</th>\n";
                conteudoGrafico += "<th>Abr</th>\n";
                conteudoGrafico += "<th>Mai</th>\n";
                conteudoGrafico += "<th>Jun</th>\n";
                conteudoGrafico += "<th>Jul</th>\n";
                conteudoGrafico += "<th>Ago</th>\n";
                conteudoGrafico += "<th>Set</th>\n";
                conteudoGrafico += "<th>Out</th>\n";
                conteudoGrafico += "<th>Nov</th>\n";
                conteudoGrafico += "<th>Dez</th>\n";
                conteudoGrafico += "</tr>\n";
                conteudoGrafico += "</thead>\n";
                conteudoGrafico += "<tbody>\n";
                conteudoGrafico += "<tr>\n";
                conteudoGrafico += "<th>" + lstAno.SelectedItem.Text + "</th>\n";

                conteudoMensal += "<tr style=\"background-color: #f6f9fc\">\n";
                conteudoMensal += "<th colspan=\"5\"><h2>Mensal</h2></th>\n";
                conteudoMensal += "</tr>\n";

                conteudoMensal += "<tr style=\"background-color: #f6f9fc\">\n";
                conteudoMensal += "<th>Mês</th>\n";
                conteudoMensal += "<th>Valor pago por disciplina</th>\n";
                conteudoMensal += "</tr>\n";

                for (int i = 1; i < 13; i++)
                {
                    valorCusto = aula(i.ToString());

                    conteudoMensal += "<tr align=\"center\">\n";
                    conteudoMensal += "<td>" + pegarMes(i) + "</td>\n";
                    conteudoMensal += "<td>R$ " + vV.validar(valorCusto.ToString()).Replace(".", "") + "</td>\n";
                    conteudoMensal += "</tr>\n";

                    conteudoGrafico += "<td>" + vV.validar(valorCusto.ToString()).Replace(".", "") + "</td>\n";
                }

                conteudoMensal += "</table>\n";

                conteudoGrafico += "</tr>\n";
                conteudoGrafico += "</tbody>\n";
                conteudoGrafico += "</table>\n";

                Panel1.Controls.Add(new LiteralControl(conteudoMensal));
                Panel2.Controls.Add(new LiteralControl(conteudoGrafico));
            }
        }

        double aula(string mes)
        {
            if (mes.Length == 1)
            {
                mes = "0" + mes;
            }

            SqlConnection sqld = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
            sqld.Open();

            double valor = 0;
            double calculoPorcentagem = 0;

            string selectAulas = "SELECT a.meiaHora, a.codigoTipoAula, ";

            selectAulas += "(select v.valorValorEspecialAluno  ";
            selectAulas += "from valorEspecialAluno v where convert(datetime,a.dataAula,103) BETWEEN  ";
            selectAulas += "convert(datetime, v.dataInicialValorEspecialAluno,103) AND convert(datetime, v.dataFinalValorEspecialAluno,103)  ";
            selectAulas += "and a.codigoAluno = v.codigoAluno) as valorAulaEspecial,  ";

            selectAulas += "(select v.aulaValor from valorAula v where convert(datetime,a.dataAula,103)  ";
            selectAulas += "BETWEEN convert(datetime, v.dataInicial,103) AND convert(datetime, v.dataFinal,103) and  ";
            selectAulas += "a.codigoTipoAula = v.codigoTipoAula) as valorAula,  ";

            selectAulas += "(select COUNT(*) as quantidadePessoasGrupo from alunoGrupo where a.codigoGrupo = alunoGrupo.codigoGrupo) as quantidadePessoasGrupo ";

            selectAulas += "FROM aula a WHERE a.aulaRealizada = 1 and a.codigoDisciplina = " + lstDisciplina.SelectedValue + " and (SUBSTRING ( a.dataAula ,4 , 2 )) = '" + mes + "' and a.codigoAnoLetivo = " + lstAno.SelectedValue;


            SqlCommand cmdPrincipal = new SqlCommand(selectAulas, sqld);
            SqlDataReader drPrincipal = cmdPrincipal.ExecuteReader();

            if (drPrincipal.HasRows)
            {
                while (drPrincipal.Read())
                {
                    if ((int)(drPrincipal["quantidadePessoasGrupo"]) != 0)
                    {
                        try
                        {
                            if (Convert.ToBoolean(drPrincipal["meiaHora"]))
                            {
                                calculoPorcentagem = ((Convert.ToDouble(drPrincipal["valorAula"].ToString()) / 2) * (int)(drPrincipal["quantidadePessoasGrupo"]));
                            }
                            else
                            {
                                calculoPorcentagem = (Convert.ToDouble(drPrincipal["valorAula"].ToString()) * (int)(drPrincipal["quantidadePessoasGrupo"]));
                            }
                        }
                        catch
                        {
                        }
                    }
                    else
                    {
                        if (drPrincipal["valorAulaEspecial"].ToString().Replace(" ", "") != "")
                        {
                            try
                            {
                                if (Convert.ToBoolean(drPrincipal["meiaHora"]))
                                {
                                    calculoPorcentagem = (Convert.ToDouble(drPrincipal["valorAulaEspecial"].ToString()) / 2);
                                }
                                else
                                {
                                    calculoPorcentagem = Convert.ToDouble(drPrincipal["valorAulaEspecial"].ToString());
                                }
                            }
                            catch
                            {
                            }
                        }
                        else
                        {
                            try
                            {
                                if (Convert.ToBoolean(drPrincipal["meiaHora"]))
                                {
                                    calculoPorcentagem = (Convert.ToDouble(drPrincipal["valorAula"].ToString()) / 2);
                                }
                                else
                                {
                                    calculoPorcentagem = Convert.ToDouble(drPrincipal["valorAula"].ToString());
                                }
                            }
                            catch
                            {
                            }
                        }
                    }

                    valor += calculoPorcentagem;
                }
            }

            drPrincipal.Close();

            sqld.Close();

            return valor;
        }

        double aula()
        {
            SqlConnection sqld = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
            sqld.Open();

            double valor = 0;
            double calculoPorcentagem = 0;

            string selectAulas = "SELECT a.meiaHora, a.codigoTipoAula, ";

            selectAulas += "(select v.valorValorEspecialAluno  ";
            selectAulas += "from valorEspecialAluno v where convert(datetime,a.dataAula,103) BETWEEN  ";
            selectAulas += "convert(datetime, v.dataInicialValorEspecialAluno,103) AND convert(datetime, v.dataFinalValorEspecialAluno,103)  ";
            selectAulas += "and a.codigoAluno = v.codigoAluno) as valorAulaEspecial,  ";

            selectAulas += "(select v.aulaValor from valorAula v where convert(datetime,a.dataAula,103)  ";
            selectAulas += "BETWEEN convert(datetime, v.dataInicial,103) AND convert(datetime, v.dataFinal,103) and  ";
            selectAulas += "a.codigoTipoAula = v.codigoTipoAula) as valorAula,  ";

            selectAulas += "(select COUNT(*) as quantidadePessoasGrupo from alunoGrupo where a.codigoGrupo = alunoGrupo.codigoGrupo) as quantidadePessoasGrupo ";

            selectAulas += "FROM aula a WHERE a.aulaRealizada = 1 and a.codigoDisciplina = " + lstDisciplina.SelectedValue + " and a.codigoAnoLetivo = " + lstAno.SelectedValue;


            SqlCommand cmdPrincipal = new SqlCommand(selectAulas, sqld);
            SqlDataReader drPrincipal = cmdPrincipal.ExecuteReader();

            if (drPrincipal.HasRows)
            {
                while (drPrincipal.Read())
                {
                    if ((int)(drPrincipal["quantidadePessoasGrupo"]) != 0)
                    {
                        try
                        {
                            if (Convert.ToBoolean(drPrincipal["meiaHora"]))
                            {
                                calculoPorcentagem = ((Convert.ToDouble(drPrincipal["valorAula"].ToString()) / 2) * (int)(drPrincipal["quantidadePessoasGrupo"]));
                            }
                            else
                            {
                                calculoPorcentagem = (Convert.ToDouble(drPrincipal["valorAula"].ToString()) * (int)(drPrincipal["quantidadePessoasGrupo"]));
                            }
                        }
                        catch
                        {
                        }
                    }
                    else
                    {
                        if (drPrincipal["valorAulaEspecial"].ToString().Replace(" ", "") != "")
                        {
                            try
                            {
                                if (Convert.ToBoolean(drPrincipal["meiaHora"]))
                                {
                                    calculoPorcentagem = (Convert.ToDouble(drPrincipal["valorAulaEspecial"].ToString()) / 2);
                                }
                                else
                                {
                                    calculoPorcentagem = Convert.ToDouble(drPrincipal["valorAulaEspecial"].ToString());
                                }
                            }
                            catch
                            {
                            }
                        }
                        else
                        {
                            try
                            {
                                if (Convert.ToBoolean(drPrincipal["meiaHora"]))
                                {
                                    calculoPorcentagem = (Convert.ToDouble(drPrincipal["valorAula"].ToString()) / 2);
                                }
                                else
                                {
                                    calculoPorcentagem = Convert.ToDouble(drPrincipal["valorAula"].ToString());
                                }
                            }
                            catch
                            {
                            }
                        }
                    }

                    valor += calculoPorcentagem;
                }
            }

            drPrincipal.Close();

            sqld.Close();

            return valor;
        }

        string pegarMes(int mes)
        {
            string textoMes = "";

            switch (mes)
            {
                case 1: textoMes = "Janeiro";
                    break;
                case 2: textoMes = "Fevereiro";
                    break;
                case 3: textoMes = "Março";
                    break;
                case 4: textoMes = "Abril";
                    break;
                case 5: textoMes = "Maio";
                    break;
                case 6: textoMes = "Junho";
                    break;
                case 7: textoMes = "Julho";
                    break;
                case 8: textoMes = "Agosto";
                    break;
                case 9: textoMes = "Setembro";
                    break;
                case 10: textoMes = "Outubro";
                    break;
                case 11: textoMes = "Novembro";
                    break;
                default: textoMes = "Dezembro";
                    break;
            }
            return textoMes;
        }
    }
}
